import java.util.Arrays;

public class Test {
    //给定一个整数数组 nums，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
    public static void main(String[] args) {
        int[] nums={1,2,3,4,5,6,7};
        //          7,6,5,4,3,2,1
        //          5,6,7,1,2,3,4
        rotate(nums,3);
        System.out.println(Arrays.toString(nums));
    }
    //采用数组翻转的方法
    //java没有提供自带范围的翻转方法只能自己编写一个
    public static void rotate(int[] nums, int k) {
        k=k%nums.length;//解决了k>=num.length的情况
        reverse(nums,0,nums.length-1);
        reverse(nums,0,k-1);
        reverse(nums,k,nums.length-1);
    }

    public static void reverse(int[] nums,int first,int end){
        while(first<=end){
            int temp=nums[first];
            nums[first]=nums[end];
            nums[end]=temp;
            first++;
            end--;
        }
    }

    //当nums.lenghth<=4,该方法并不适用
    /*public static void rotate(int[] nums, int k) {
        int[] arr = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            arr[i]=nums[i];
        }
        int j=0;
        for (int i =nums.length-k ; i <nums.length ; i++) {
            nums[j]=arr[i];
            j++;
        }

        int m= 0;
        for (int i =nums.length-k-1;  i <nums.length ; i++) {
            nums[i]=arr[m];
            m++;
        }
        System.out.println(Arrays.toString(nums));

    }*/

    public static int missingNumber(int[] nums) {
        int count=0;
        for (int i = 0; i < nums.length; i++) {
            count^=nums[i];
        }
        for (int i = 0; i <= nums.length; i++) {
            count^=i;
        }
        return count;
    }

    public static void main2(String[] args) {
        int[] nums={1,0,3};

        int tem=missingNumber(nums);
        System.out.println(tem);
    }

    //未能通过全部用例
    /*public static int missingNumber(int[] nums) {
        int[] arr=new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            arr[i]=i;
        }
        Arrays.sort(nums);
        for (int j = 0; j < nums.length; j++) {
            if(arr[j]!=nums[j]){
                return j;
            }
        }
        return -1;
    }*/

    /*public static void main(String[] args) {
        int[] nums={1,0,3};

        int tem=missingNumber(nums);
        System.out.println(tem);
    }*/

    public static void main1(String[] args) {
        StringBuilder sb1 = new StringBuilder("hello");
        StringBuilder sb2 = sb1;
        // 追加：即尾插-->字符、字符串、整形数字
        sb1.append(' '); // hello
        sb1.append("world"); // hello world
        sb1.append(123); // hello world123
        System.out.println(sb1); // hello world123
        System.out.println(sb1 == sb2); // true
        System.out.println(sb1.charAt(0)); // 获取0号位上的字符 h
        System.out.println(sb1.length()); // 获取字符串的有效长度14
        System.out.println(sb1.capacity()); // 获取底层数组的总大小
        sb1.setCharAt(0, 'H'); // 设置任意位置的字符 Hello world123
        sb1.insert(0, "Hello world!!!"); // Hello world!!!Hello world123
        System.out.println(sb1);
        System.out.println(sb1.indexOf("Hello")); // 获取Hello第一次出现的位置
        System.out.println(sb1.lastIndexOf("hello")); // 获取hello最后一次出现的位置
        sb1.deleteCharAt(0); // 删除首字符
        sb1.delete(0,5); // 删除[0, 5)范围内的字符
        String str = sb1.substring(0, 5); // 截取[0, 5)区间中的字符以String的方式返回
        System.out.println(str);
        sb1.reverse(); // 字符串逆转
        str = sb1.toString(); // 将StringBuffer以String的方式返回
        System.out.println(str);
    }
}
